package gestioneDatabase.User;

import java.util.HashMap;

import models.User;
/**
 * Singleton che gestisce tutte le azioni che coinvolgono gli utenti.
 *
 */
public class UserManager {

	private HashMap<String, User> users;
	private AllUsersRetriever retriever = new AllUsersRetriever();
	private UserInserter inserter;

	private UserManager() {
	}

	private static UserManager userManager = new UserManager();
	
	/**
	 * metodo utilizzato dalle altre classi per poter chiamare il singleton.
	 * @return
	 * 			L'unica istanza di UserManager.
	 */
	public static UserManager getUserManager() {
		return userManager;
	}
	
	/**
	 * Restituisce una hashmap contenente tutti gli utenti
	 * 
	 * @return	
	 * 			Un oggetto {@link HashMap}
	 * 		
	 */
	public HashMap<String, User> getUsers() {
		this.users = retriever.getUsers();
		return users;
	}
	
	/**
	 * Inserisce un nuovo utente
	 * 
	 * @param user
	 * 			Il nuovo utente da inserire
	 */
	public void InsertUser(User user) {
		inserter = new UserInserter(user);
		inserter.execute();
	}
	
	/**
	 * Crea un nuovo utente con i parametri passati
	 * 
	 * @param openId
	 * 			L'id dell'utente
	 * @param fullName
	 * 			Il nome dell'utente
	 * @param email
	 * 			L'indirizzo email dell'utente
	 * @param stylesheet
	 * 			Lo stile scelto dall'utente
	 * @return
	 * 			Un oggetto di tipo {@link User} riempito dei parametri.
	 */
	public User fillSingleUser(String openId, String fullName, String email,
			String stylesheet) {
		User user = new User(fullName);
		user.setEmailAddress(email);
		user.setOpenId(openId);
		user.setStylesheet(stylesheet);
		return user;
	}
}
